package chun.chun2.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

/**
 * 数据库连接工具类
 * 负责加载配置文件并返回数据库连接
 */
public class DBUtil {

    // 静态常量：保存数据库连接参数
    private static final Properties props = new Properties();

    // 静态代码块：类加载时执行，一次性读取配置文件并注册驱动
    static {
        try {
            // 从类路径（resources 目录）加载 db.properties 文件
            InputStream resource = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
            if (resource == null) {
                // 若文件不存在，直接抛出异常，防止后续空指针
                throw new RuntimeException("db.properties not found in classpath");
            }
            // 将配置文件内容加载到 Properties 集合
            props.load(resource);
            // 注册 MySQL JDBC 驱动（可省略，但显式写出更直观）
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (IOException | ClassNotFoundException e) {
            // 初始化失败时直接抛运行时异常，阻止程序继续启动
            throw new RuntimeException("Failed to initialize DBUtil", e);
        }
    }

    /**
     * 获取数据库连接
     * @return 数据库连接对象 Connection
     * @throws RuntimeException 如果获取连接失败（如 URL、账号、密码错误）
     */
    public static Connection getConnection() {
        try {
            // 从 Properties 中读取 url、用户名、密码并创建连接
            return DriverManager.getConnection(
                    props.getProperty("jdbcUrl"),
                    props.getProperty("username"),
                    props.getProperty("password")
            );
        } catch (SQLException e) {
            // 获取连接失败时抛出运行时异常，方便上层统一处理
            throw new RuntimeException("Failed to get database connection", e);
        }
    }
}